home *** CD-ROM | disk | FTP | other *** search
- /*
- * ccache.h - FTP Connection Cache
- *
- * David Merkel & Mark Peterson, University of Colorado - Boulder, July 1994
- *
- * $Id: ccache.h,v 1.6 1995/01/10 16:30:20 hardy Exp $
- *
- * ----------------------------------------------------------------------
- * Copyright (c) 1994, 1995. All rights reserved.
- *
- * Mic Bowman of Transarc Corporation.
- * Peter Danzig of the University of Southern California.
- * Darren R. Hardy of the University of Colorado at Boulder.
- * Udi Manber of the University of Arizona.
- * Michael F. Schwartz of the University of Colorado at Boulder.
- *
- * This copyright notice applies to all code in Harvest other than
- * subsystems developed elsewhere, which contain other copyright notices
- * in their source text.
- *
- * The Harvest software was developed by the Internet Research Task
- * Force Research Group on Resource Discovery (IRTF-RD). The Harvest
- * software may be used for academic, research, government, and internal
- * business purposes without charge. If you wish to sell or distribute
- * the Harvest software to commercial clients or partners, you must
- * license the software. See
- * http://harvest.cs.colorado.edu/harvest/copyright,licensing.html#licensing.
- *
- * The Harvest software is provided ``as is'', without express or
- * implied warranty, and with no support nor obligation to assist in its
- * use, correction, modification or enhancement. We assume no liability
- * with respect to the infringement of copyrights, trade secrets, or any
- * patents, and are not responsible for consequential damages. Proper
- * use of the Harvest software is entirely the responsibility of the user.
- *
- * For those who are using Harvest for non-commercial purposes, you may
- * make derivative works, subject to the following constraints:
- *
- * - You must include the above copyright notice and these accompanying
- * paragraphs in all forms of derivative works, and any documentation
- * and other materials related to such distribution and use acknowledge
- * that the software was developed at the above institutions.
- *
- * - You must notify IRTF-RD regarding your distribution of the
- * derivative work.
- *
- * - You must clearly notify users that your are distributing a modified
- * version and not the original Harvest software.
- *
- * - Any derivative product is also subject to the restrictions of the
- * copyright, including distribution and use limitations.
- *
- */
- #ifndef _CCACHE_H_
- #define _CCACHE_H_
-
- #include <stdio.h> /* for FILE */
- #include "url.h" /* for URL */
- #include "config.h"
-
- #ifndef _PARAMS
- #if defined(__STDC__) || defined(__cplusplus) || defined(__STRICT_ANSI__)
- #define _PARAMS(ARGS) ARGS
- #else /* Traditional C */
- #define _PARAMS(ARGS) ()
- #endif /* __STDC__ */
- #endif /* _PARAMS */
-
- typedef char Datum;
- typedef int Boolean;
-
- #define HASH_SLOTS (256)
- #define MIN_CONNECTIONS 3 /* Min number of connections to maintain. */
- #define MIN_TIMEOUT 5 /* Min timeout in minutes. */
-
- typedef enum {
- INACTIVE, MEMORY_ONLY, FILE_ONLY, OPTIMIZE, TEMP
- } BufferStatus;
-
- typedef struct SockCntlRec {
- int timerid; /* ID of the expiration timer. */
- URL *socketInfo; /* The URL structure */
- int theSocket;
- unsigned long theHostIP;
- char *incomDataBuf; /* Incoming data buffer */
- FILE *incomDataFile; /* Incoming data file buffer */
- int incomDataSize; /* Number of bytes in buffer */
- BufferStatus sockStateStor; /* Default status for buffering */
- struct SockCntlRec *hashPrev; /* Hash table previous */
- struct SockCntlRec *hashNext; /* Hash table next */
- struct SockCntlRec *listPrev; /* TimeOut list previous */
- struct SockCntlRec *listNext; /* TimeOut list next */
- } SockCntlRec;
-
-
- typedef struct InitConfigRec {
- int maxConnections; /* max # of socks to keep open at one time. */
- long timeOut; /* TimeOut time in seconds. */
- } InitConfigRec;
-
- enum ptype {
- STR, INT, POINTER, MD5
- };
-
- typedef enum ptype PType;
-
- #define MAX_LINE_LENGTH 1024
- #define MAX_FILENAME_LENGTH 1024
- #define HOST_NAME_LENGTH 1024
- #define SERV_REPLY_LENGTH 3
- #define BUFFER_SIZE 1024 /* buffer size for read calls */
- #define INIT_FILE_SIZE 50000 /* bufsz if read files in mem */
- #define REALLOC_BLOCK 2048 /* blk sz on realloc calls */
- #define BACK_LOG 5
- #define ACCEPT_TIMEOUT 5 /* time in seconds to timeout */
- #define READ_TIMEOUT 5 /* if no data on line */
-
- #define MULTI_LINE_CODE '-'
-
- /*
- * Controls newly created files permissions, as per chmod() arguments.
- * Final permissions are determined by process umask settings
- */
- #define INIT_PERMISSION 0666 /* 'rw-rw-rw-' */
-
- #define MAX_MESSAGE_LENGTH 50
- #define PORT_MESSAGE_LENGTH 12
-
- /* ftp message defines */
- #define CONNECT "CONNECT"
- #define USER "USER"
- #define PASSWD "PASS"
- #define MODE "MODE"
- #define TYPE "TYPE"
- #define RETRIEVE "RETR"
- #define PORT "PORT"
- #define REINIT "REIN"
- #define DISCONNECT "QUIT"
-
- /* numerical defines for previous for fast compares */
- #define CONNECT_CHK 0
- #define USER_CHK 1
- #define PASSWD_CHK 2
- #define MODE_CHK 3
- #define TYPE_CHK 4
- #define RETRIEVE_CHK 5
- #define PORT_CHK 6
- #define REINIT_CHK 7
- #define DISCONNECT_CHK 8
-
-
- /* ftp mode and type defines */
- #define IMAGE 'I'
- #define STREAM 'S'
-
- /* ftp server reply codes */
- #define DATA_CONN_OPEN (0x31323500) /* "125" */
- #define START_TRANS (0x31353000) /* "150" */
- #define CMD_OKAY (0x32303000) /* "200" */
- #define CLOSING (0x32323100) /* "221" */
- #define CONNECT_EST (0x32323000) /* "220" */
- #define TRANS_SUCCESS (0x32323600) /* "226" */
- #define USER_LOGIN (0x32333000) /* "230" */
- #define SEND_PASS (0x33333100) /* "331" */
-
-
- typedef struct data_return {
- Boolean inMemory; /* set if return file in mem */
- Boolean useTempFile; /* set if use temp file */
- char *buffer; /* for memory return */
- char fileName[MAX_FILENAME_LENGTH]; /* save if not in memory */
- long fileSize; /* data size */
- } DataReturn;
-
- typedef short ERRCODE;
- typedef int CacheErr;
-
- #define SERV_NOT_RDY (0x31323000) /*"120" */
- #define NEED_ACCOUNT (0x33333200) /*"332" */
- #define SERV_NOT_AVAIL (0x34323100) /*"421" */
- #define SYNTAX_ERR (0x35303000) /*"500" */
- #define SYNTAX_ERR_PARM (0x35303100) /*"501" */
- #define CMD_NOT_IMPL (0x35303200) /*"502" */
- #define BAD_CMD_SEQ (0x35303300) /*"503" */
- #define CMD_UNIMP_PARM (0x35303400) /*"504" */
- #define NOT_LOGD_IN (0x35333000) /*"530" */
- #define FILE_NOT_FOUND (0x35353000) /*"550" */
-
- #define noErr 0
- #define srvNotRdy 1
- #define needAccnt 2
- #define srvNotAvl 3
- #define syntaxErr 4
- #define cmdNotImp 5
- #define badCmdSeq 6
- #define cmdNImpParam 7
- #define notLogdIn 8
-
- #define initSockErr 9
- #define readSockErr 10
- #define getSockErr 11
- #define getHostErr 12
- #define connectErr 13
- #define memoryErr 14
- #define writeSockErr 15
- #define setSockOptErr 16
- #define getHNameErr 17
- #define getHBNameErr 18
- #define getSNameErr 19
- #define bindErr 20
- #define fileOpenErr 22
- #define writeFileErr 23
- #define tmpNameErr 24
- #define acceptTOut 25
- #define readTOut 26
- #define argInvalid 27
- #define noReply 28
- #define badParam 29
- #define urlErr 30
- #define badurlType 31
- #define fileNotFound 32
-
- #define NO_ERROR 0
- #define INIT_SOCKET_ERR -1
- #define READ_FROM_SOCK_ERR -2
- #define GET_SOCKET_ERR -3
- #define GETHOST_ERR -4
- #define CONNECT_ERR -5
- #define MEMORY_ERROR -6
- #define WRITE_TO_SOCK_ERR -7
- #define SET_SOCKOPT_ERR -8
- #define GET_HOSTNAME_ERR -9
- #define GET_HOSTBYNAME_ERR -10
- #define GET_SOCKNAME_ERR -11
- #define BIND_ERR -12
- #define FILE_OPEN_ERR -14
- #define WRITE_FILE_ERR -15
- #define CANT_GET_TMPNAME -16
-
- #define SERV_REPLY_ERROR -20
- #define NO_PASS_REQ -21
- #define ACCEPT_TIMEOUT_ERR -22
- #define READ_TIMEOUT_ERR -23
- #define ARGUMENT_INVALID -24
- #define NO_REPLY_PRESENT -25
-
- #define BAD_PARAM_ERR -50
- #define URL_ERR -51
- #define BAD_URL_TYPE -52
-
-
- #ifndef DEBUG
- #undef DEBUG 4 /* debug level */
- #endif
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
-
- #define BACK_LOG 5
- #define INIT_URL_LEN 256
- #define INIT_PARAM_LEN 50
- #define REALLOC_BLK 20
-
- #define LINE_FEED '\n'
- #define CARRG_RET '\r'
- #define PARAM_END '.'
- #define BLOCK_END '!'
- #define TERM_LEN 3
- #define MD5_LEN 32
-
- /* timeouts for read calls on sockets */
-
- /* timeout for server receiving client request messages */
- #define SERVER_TIMEOUT 5
-
- /* timeout for util calls reading params from socket */
- #define PARAM_TIMEOUT 5
-
- /* timeout for client waiting for server response */
- #define CLIENT_TIMEOUT 120
-
-
- /* ftp.c */
- int FTPInit _PARAMS((u_long, int, char *));
- int Login _PARAMS((char *, char *, int, Boolean, char *));
- int Disconnect _PARAMS((int, char *));
- int Retrieve _PARAMS((char *, int,int,Boolean,Boolean, char *, DataReturn *));
-
- /* ftp_util.c */
- int InitSocket _PARAMS((u_long, int ));
- int ReadServReply _PARAMS((int, char *));
- int SendMessage _PARAMS((char *, char *, int));
- void ReadOutText _PARAMS((int, Boolean, char *));
- int CheckServReply _PARAMS((int, char *));
- int PrepareDataConnect _PARAMS((int, Boolean));
- int RetrieveFile _PARAMS((int, DataReturn *));
-
- Boolean DisconnectOne _PARAMS(());
- CacheErr GetError _PARAMS(());
- char *GetFTPError _PARAMS(());
- void DoError _PARAMS((CacheErr, char *));
-
- /* ccache_util.c */
- int MyRead _PARAMS((int, char *, int, int));
- int AddURL _PARAMS((URL *, char **, int, int, Boolean));
- int GetURL _PARAMS((URL *, int));
- int GetParam _PARAMS((char **, PType, int));
- int AddParam _PARAMS((char *, PType, char **, int *, int, Boolean));
- int SocketWrite _PARAMS((int, char *, int));
- void PrintURL _PARAMS((URL *));
- unsigned long gethostinhex _PARAMS((char *));
-
- void SockInit _PARAMS((InitConfigRec *));
- DataReturn *SockGetData _PARAMS((URL *, BufferStatus, char *));
- void ShutDownCache _PARAMS(());
- void DestroyDataReturn _PARAMS((DataReturn *));
-
-
- #endif /* _CCACHE_H_ */
-